redis-protocol 3.1.0

Structs and functions to implement the Redis protocol.
Documentation

Redis Protocol

License License CircleCI Crates.io API docs

Structs and functions for implementing the Redis protocol.

Install

With cargo edit.

cargo add redis-protocol

Features

  • Supports RESP2 and RESP3, including streaming frames.
  • Encode and decode with BytesMut or slices.
  • Parse publish-subscribe messages.
  • Support cluster redirection errors.
  • Implements cluster key hashing.
  • Utility functions for converting between RESP2 and RESP3.

Examples

use redis_protocol::resp2::prelude::*;
use bytes::BytesMut;

fn main() {
  let frame = Frame::BulkString("foobar".into());
  let mut buf = BytesMut::new();
  
  let len = match encode_bytes(&mut buf, &frame) {
    Ok(l) => l,
    Err(e) => panic!("Error encoding frame: {:?}", e)
  };
  println!("Encoded {} bytes into buffer with contents {:?}", len, buf);
  
  let buf: BytesMut = "*3\r\n$3\r\nFoo\r\n$-1\r\n$3\r\nBar\r\n".into();
  let (frame, consumed) = match decode(&buf) {
    Ok(Some((f, c))) => (f, c),
    Ok(None) => panic!("Incomplete frame."),
    Err(e) => panic!("Error parsing bytes: {:?}", e)
  };
  println!("Parsed frame {:?} and consumed {} bytes", frame, consumed);
  
  let key = "foobarbaz";
  println!("Hash slot for {}: {}", key, redis_keyslot(key));
}

IndexMap

Enable the index-map feature to use IndexMap instead of HashMap and HashSet. This is useful for testing and may also be useful to callers.

Tests

To run the unit tests:

cargo test --features index-map